#include<cppr.hpp>
using namespace std;

class A
{
public:
    A(int a):a(a)
    {
        cout<<"A()"<<endl;
    }
    ~A()
    {
        cout<<"~A()"<<endl;
    }
    void show()
    {
        cout<<"a="<<a<<endl;
    }
private:
    int a;
};

int main()
{
    //智能指针
    //unique_ptr<A> p1(new A(10));
    //unique_ptr<A> p2(p1);//编译错误，不能复制
    //unique_ptr<A> p3=std::move(p1);//p1置空，p3指向A(10)
    //p3->show();//p1=nullptr;
    //p3=nullptr;
    //unique_ptr<A> p4(new A(20));
    //p3=std::move(p4);//p4置空，p3指向A(20)
    //p3->show();
    //p4=nullptr;
    //unique_ptr<A> p5(new A(30));
    //unique_ptr<A> p6=std::move(p5);//p5置空，p6指向A(30)
    //p6->show();
    //p5=nullptr;

    //shared_ptr<A> p7(new A(40));
    //shared_ptr<A> p8(p7);//p7和p8都指向A(40)
    //shared_ptr<A> p9=std::move(p7);//p7置空，p9指向A(40)
    //p9->show();
    //p7=nullptr;
    //shared_ptr<A> p10(new A(50));
    //shared_ptr<A> p11=std::move(p10);//p10置空，p11指向A(50)
    //p11->show();
    //p10=nullptr;

    //weak_ptr<A> p12(new A(60));//编译错误，不能直接创建weak_ptr
    //weak_ptr<A> p13(p12);//编译错误，不能直接复制
    //weak_ptr<A> p14=std::move(p12);//编译错误，不能直接移动
    return 0;
}